타입 변환과 단축평가
작성일 : 2024.10.12
타입 변환
- 명시적 타입 변환 | 타입 캐스팅 : 의도적으로 값의 타입을 변환하는 것
- 암묵적 타입 변환 | 타입 강제 변환 : 암묵적으로 타입이 자동으로 변환되는 것
-
타입 변환 : 기존 원시 값을 사용해 다른 타입의 새로운 원시 값을 생성하는 것
- 에러없이 평가하기 위해 피연산자의 값을 암묵적 타입 변환해 새로운 타입의 값을 만들어 한번 사용하고 버림
-
타입 변환의 목적 : 자신과 동료가 예측가능한 코드를 작성해야 한다
암묵적 타입 변환
문자열 타입
// 숫자 타입
0 + '' // -> "0"
-0 + '' // -> "0"
1 + '' // -> "1"
-1 + '' // -> "-1"
NaN + '' // -> "NaN"
Infinity + '' // -> "Infinity"
-Infinity + '' // -> "-Infinity"
//불리언타입
true + '' // -> "true"
false + '' // -> "false"
//null타입
null + '' // -> "null"
// undefined 타입
undefined + '' // -> "undefined"
//심벌 타입
(Symbol()) + '' // -> TypeError : Cannot convert a Symbal value to a string
//객체 타입
({}) + '' // -> "[object Object]"
Math + '' // -> "[object Math]"
[] + '' // -> ""
[10, 20] + '' // -> "10, 20"
(function(){}) + '' // -> "function(){}"
Array + '' // -> "function Array(){ [native code] }"
숫자 타입
- 객체와 빈 배열이 아닌 배열 undefined는 변환되지 않아 NaN이 된다
// 숫자 타입
+'' // -> 0
+'0' // -> 0
+'1' // -> 1
+'string' // -> NaN
// 불리언 타입
+true // -> 1
+false // -> 0
// null 타입
+null // -> 0
// undefined 타입
+undefined // -> NaN
// 심벌 타입
+Symbol() // -> TypeError : Cannot convert a Symbal value to a number
// 객체 타입
+{} // -> NaN
+[] // -> 0
+[10,20] // -> NaN
+(function(){}) // -> NaN
불리언타입
- JS 엔진은 불리언 타입이 아닌 값을 Truthy 값 또는 Falsy값으로 구분
- Falsy값 항목
- false
- undefined
- null
- 0, -0
- NaN
- '' (빈 문자열)
- Falsy값 항목
암묵적 타입 변환
문자열 타입 변환
// 1.String 생성자 사용
String(1);
String(NaN);
// 2.Object.prototype.toString 메서드 사용
(1).toString();
(NaN).toString();
// 3.문자열 연결 연산자 사용
1 + '';
NaN + '';
숫자 타입 변환
// 1. Number 생성자 사용
Number('0');
// 2. parseInt, parseFloat 함수 사용
parseInt('0');
parseFloat('0');
// 3. 산술 연산자 사용
+'0';
+'-1';
'0' * 1;
단축평가
- 단축평가 : 표현식을 평가하는 도중에 평가 결과가 확정된 경우 나머지 평가 과정을 생략하는 것
var elem = null;
var value = elem.value; // TypeError : Cannot read property 'value' of null
var value = elem && elem.value; // -> null